home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / quopri.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  5KB  |  258 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. __all__ = [
  5.     'encode',
  6.     'decode',
  7.     'encodestring',
  8.     'decodestring']
  9. ESCAPE = '='
  10. MAXLINESIZE = 76
  11. HEX = '0123456789ABCDEF'
  12. EMPTYSTRING = ''
  13.  
  14. try:
  15.     from binascii import a2b_qp, b2a_qp
  16. except ImportError:
  17.     a2b_qp = None
  18.     b2a_qp = None
  19.  
  20.  
  21. def needsquoting(c, quotetabs, header):
  22.     if c in ' \t':
  23.         return quotetabs
  24.     
  25.     if c == '_':
  26.         return header
  27.     
  28.     if not c == ESCAPE:
  29.         pass
  30.     return not None if c <= c else c <= '~'
  31.  
  32.  
  33. def quote(c):
  34.     i = ord(c)
  35.     return ESCAPE + HEX[i // 16] + HEX[i % 16]
  36.  
  37.  
  38. def encode(input, output, quotetabs, header = 0):
  39.     if b2a_qp is not None:
  40.         data = input.read()
  41.         odata = b2a_qp(data, quotetabs = quotetabs, header = header)
  42.         output.write(odata)
  43.         return None
  44.     
  45.     
  46.     def write(s, output = output, lineEnd = '\n'):
  47.         if s and s[-1:] in ' \t':
  48.             output.write(s[:-1] + quote(s[-1]) + lineEnd)
  49.         elif s == '.':
  50.             output.write(quote(s) + lineEnd)
  51.         else:
  52.             output.write(s + lineEnd)
  53.  
  54.     prevline = None
  55.     while None:
  56.         line = input.readline()
  57.         if not line:
  58.             break
  59.         
  60.         outline = []
  61.         stripped = ''
  62.         if line[-1:] == '\n':
  63.             line = line[:-1]
  64.             stripped = '\n'
  65.         
  66.         for c in line:
  67.             if needsquoting(c, quotetabs, header):
  68.                 c = quote(c)
  69.             
  70.             if header and c == ' ':
  71.                 outline.append('_')
  72.                 continue
  73.             outline.append(c)
  74.         
  75.         if prevline is not None:
  76.             write(prevline)
  77.         
  78.         thisline = EMPTYSTRING.join(outline)
  79.         while len(thisline) > MAXLINESIZE:
  80.             write(thisline[:MAXLINESIZE - 1], lineEnd = '=\n')
  81.             thisline = thisline[MAXLINESIZE - 1:]
  82.         prevline = thisline
  83.         continue
  84.         if prevline is not None:
  85.             write(prevline, lineEnd = stripped)
  86.         
  87.  
  88.  
  89. def encodestring(s, quotetabs = 0, header = 0):
  90.     if b2a_qp is not None:
  91.         return b2a_qp(s, quotetabs = quotetabs, header = header)
  92.     
  93.     StringIO = StringIO
  94.     import cStringIO
  95.     infp = StringIO(s)
  96.     outfp = StringIO()
  97.     encode(infp, outfp, quotetabs, header)
  98.     return outfp.getvalue()
  99.  
  100.  
  101. def decode(input, output, header = 0):
  102.     if a2b_qp is not None:
  103.         data = input.read()
  104.         odata = a2b_qp(data, header = header)
  105.         output.write(odata)
  106.         return None
  107.     
  108.     new = ''
  109.     while None:
  110.         line = input.readline()
  111.         if not line:
  112.             break
  113.         
  114.         i = 0
  115.         n = len(line)
  116.         if n > 0 and line[n - 1] == '\n':
  117.             partial = 0
  118.             n = n - 1
  119.             while n > 0 and line[n - 1] in ' \t\r':
  120.                 n = n - 1
  121.         else:
  122.             partial = 1
  123.         while i < n:
  124.             c = line[i]
  125.             if c == '_' and header:
  126.                 new = new + ' '
  127.                 i = i + 1
  128.                 continue
  129.             if c != ESCAPE:
  130.                 new = new + c
  131.                 i = i + 1
  132.                 continue
  133.             if i + 1 == n and not partial:
  134.                 partial = 1
  135.                 break
  136.                 continue
  137.             if i + 1 < n and line[i + 1] == ESCAPE:
  138.                 new = new + ESCAPE
  139.                 i = i + 2
  140.                 continue
  141.             if i + 2 < n and ishex(line[i + 1]) and ishex(line[i + 2]):
  142.                 new = new + chr(unhex(line[i + 1:i + 3]))
  143.                 i = i + 3
  144.                 continue
  145.             new = new + c
  146.             i = i + 1
  147.         if not partial:
  148.             output.write(new + '\n')
  149.             new = ''
  150.             continue
  151.         continue
  152.         if new:
  153.             output.write(new)
  154.         
  155.  
  156.  
  157. def decodestring(s, header = 0):
  158.     if a2b_qp is not None:
  159.         return a2b_qp(s, header = header)
  160.     
  161.     StringIO = StringIO
  162.     import cStringIO
  163.     infp = StringIO(s)
  164.     outfp = StringIO()
  165.     decode(infp, outfp, header = header)
  166.     return outfp.getvalue()
  167.  
  168.  
  169. def ishex(c):
  170.     return None if c <= c else None if c <= c else None if c <= c else c <= 'F'
  171.  
  172.  
  173. def unhex(s):
  174.     bits = 0
  175.     for c in s:
  176.         if c <= c:
  177.             pass
  178.         elif c <= '9':
  179.             i = ord('0')
  180.         elif c <= c:
  181.             pass
  182.         elif c <= 'f':
  183.             i = ord('a') - 10
  184.         elif c <= c:
  185.             pass
  186.         elif c <= 'F':
  187.             i = ord('A') - 10
  188.         else:
  189.             break
  190.         bits = bits * 16 + (ord(c) - i)
  191.     
  192.     return bits
  193.  
  194.  
  195. def main():
  196.     import sys as sys
  197.     import getopt as getopt
  198.     
  199.     try:
  200.         (opts, args) = getopt.getopt(sys.argv[1:], 'td')
  201.     except getopt.error:
  202.         msg = None
  203.         sys.stdout = sys.stderr
  204.         print msg
  205.         print 'usage: quopri [-t | -d] [file] ...'
  206.         print '-t: quote tabs'
  207.         print '-d: decode; default encode'
  208.         sys.exit(2)
  209.  
  210.     deco = 0
  211.     tabs = 0
  212.     for o, a in opts:
  213.         if o == '-t':
  214.             tabs = 1
  215.         
  216.         if o == '-d':
  217.             deco = 1
  218.             continue
  219.     
  220.     if tabs and deco:
  221.         sys.stdout = sys.stderr
  222.         print '-t and -d are mutually exclusive'
  223.         sys.exit(2)
  224.     
  225.     if not args:
  226.         args = [
  227.             '-']
  228.     
  229.     sts = 0
  230.     for file in args:
  231.         if file == '-':
  232.             fp = sys.stdin
  233.         else:
  234.             
  235.             try:
  236.                 fp = open(file)
  237.             except IOError:
  238.                 msg = None
  239.                 sys.stderr.write("%s: can't open (%s)\n" % (file, msg))
  240.                 sts = 1
  241.                 continue
  242.  
  243.         if deco:
  244.             decode(fp, sys.stdout)
  245.         else:
  246.             encode(fp, sys.stdout, tabs)
  247.         if fp is not sys.stdin:
  248.             fp.close()
  249.             continue
  250.     
  251.     if sts:
  252.         sys.exit(sts)
  253.     
  254.  
  255. if __name__ == '__main__':
  256.     main()
  257.  
  258.